{
  /*
  学习目标：函数的可选参数
*/

  // 😎JS中有很多可传可不传的参数，如Array.slice()
  // 参数是可选的，可以选择传，可以选择不传
  [1, 2, 3].slice(0, 1);

  // 😎TS中如何定义函数的参数，是可选的？
  // 语法: 形参参数名后加?，表示可选参数
  function sayHello(msg1: string, msg2?: string) {
    console.log(`hello ${msg1} ${msg2}`);
  }

  sayHello('React', 'Vue');
  sayHello('Angular');

  // 注意：
  // 1. 🔔可以有多个可选参数
  function sayHello2(a: string, b?: string, c?: string) {
    console.log(`hello ${a} ${b} ${c}`);
  }
  sayHello2('React');
  sayHello2('React', 'Vue');
  sayHello2('React', 'Vue', 'Angular');

  // 2. 🔔可选参数，须放在必选参数后面
  // ❌错误写法
  function sayHello3(msg1?: string, msg2: string) {
    console.log(`hello ${msg1} ${msg2}`);
  }
}
